from flask import Blueprint, render_template, g, redirect, request
from app.models import User
from flask_login import login_user

"""
Flask-Login 和其他 Flask 组件并没有太大区别，有必要开始之前了解下用户登录的步骤：

1 登录：用户提供登录凭证（如用户名和密码）提交给服务器
2 建立会话：服务器验证用户提供的凭证，如果通过验证，则建立会话（ Session ），并返回给用户一个会话号（ Session id ）
3 验证：用户在后续的交互中提供会话号，服务器将根据会话号（ Session id ）确定用户是否有效
4 登出：当用户不再与服务器交互时，注销与服务器建立的会话
"""

login_page = Blueprint('login_page', __name__, template_folder='templates')


@login_page.route('/login', methods=['GET', 'POST'])
def login():
    if g.user is not None and g.user.is_authenticated:
        return redirect('/index')
    if request.method == 'POST':
        data = {}
        user = User.query.filter_by(email_address=request.values.get('emailaddress')).first()
        if user:
            g.user = user
        else:
            data["msg"] = "<script>alert('用户不存在')</script>"
            return render_template('hs-login.html', jsondata=data)
        if g.user.verify_password(request.values.get('password')):
            login_user(g.user, request.values.get('remember'))
            return redirect('/index')
        else:
            data["msg"] = "<script>alert('账号或密码不正确')</script>"
            return render_template('hs-login.html', jsondata=data)

    return render_template('hs-login.html', jsondata={})
